package com.yeung.swordoffer;

/**
 * 一只青蛙一次可以跳上1级台阶，也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
 * <p>
 * 马上就跟着一个进阶的变态青蛙跳问题了，这里涉及一个简单的数学推导。
 * <p>
 * f(0) = 1
 * f(1) = 1
 * f(2) = f(2-1)+f(2-1) #跳一步回到f(1)问题，跳两步回到f(0)问题
 * f(3) = f(3-1)+f(3-2)+f(3-3)
 * ...
 * f(n-1) = f((n-1)-1)+f((n-1)-2)+...+f((n-1)-(n-1)) = f(n-2)+f(n-3)+...+f(0) #注意我高亮的部分
 * f(n) = f(n-1)+f(n-2)+f(n-3)...+f(0) = f(n-1)+f(n-1) = 2*f(n-1) #变身！
 */
public class 变态跳台阶 {
    public static void main(String[] args) {

    }

    public static int JumpFloor(int target) {
        if (target == 0) return 0;
        if (target == 1) return 1;
        if (target == 2) return 2;

        return 2 * JumpFloor(target - 1);
    }
}
